package br.com.admGearman.consulta.negocio;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;

import br.com.admGearman.consulta.vo.ControleArquivoVo;
import br.com.r2.util.hibernate.business.R2HbNgc;
import br.com.r2.util.hibernate.business.RestritorHb;

public class ControleArquivoNgc extends R2HbNgc<ControleArquivoVo>
{

   private Map filtroPropriedade = new HashMap();

   private Map restritores = new HashMap();

   public static final int JOIN_EST_EMPRESA = 1;

   public static final int JOIN_BANDEIRA = 2;

   private static ControleArquivoNgc instancia = null;

   private ControleArquivoNgc()
   {
      init(restritores, filtroPropriedade, ControleArquivoVo.class);
      addFiltro("estEmpresa.codigo", RestritorHb.RESTRITOR_EQ, "estEmpresaVo.codigo");
      addFiltro("bandeira.codigo", RestritorHb.RESTRITOR_EQ, "bandeiraVo.codigo");

   }

   public static ControleArquivoNgc getInstancia()
   {
      if (instancia == null)
      {
         instancia = new ControleArquivoNgc();
      }
      return instancia;
   }

   @Override
   protected Criteria montaCriteria(Session sessao, int join)
   {
      Criteria criteria = sessao.createCriteria(ControleArquivoVo.class);
      if ((join & JOIN_EST_EMPRESA) != 0)
      {
         criteria.createCriteria("estEmpresaVo", "estEmpresa", Criteria.INNER_JOIN);
      }
      if ((join & JOIN_BANDEIRA) != 0)
      {
         criteria.createCriteria("bandeiraVo", "bandeira", Criteria.INNER_JOIN);
      }
      return criteria;
   }

   @Override
   protected void setarOrdenacao(Criteria criteria, ControleArquivoVo filter,
         int join)
   {
      if ((join & JOIN_EST_EMPRESA) != 0)
      {
         criteria.addOrder(Order.asc("estEmpresa.descricao"));
      }
      if ((join & JOIN_BANDEIRA) != 0)
      {
         criteria.addOrder(Order.asc("bandeira.descricao"));
      }
      criteria.addOrder(Order.asc("descricaoTipoArquivo"));
      
   }
   
   @Override
   protected Map filtroPropriedade()
   {
      return filtroPropriedade;
   }

   @Override
   protected Map restritores()
   {
      return restritores;
   }

}
